<?php

namespace Wgx\Admin\Entity;

use PhpYes\Apps;
use PhpYes\Entity\BaseEntity;

class AdminToMenuEntity extends BaseEntity
{
    const RightNone = 0;
    const RightRead = 0b00000001; // 1
    const RightCreate = 0b00000010; // 2
    const RightUpdate = 0b00000100; // 4
    const RightDelete = 0b00001000; // 8
    const RightAll = 0b11111111; // 255

    public static $rightMap = array(
        self::RightNone => '无',
        self::RightRead => '查看',
        self::RightCreate => '新增',
        self::RightUpdate => '修改',
        self::RightDelete => '删除',
        self::RightAll => '所有',
    );

    public static $methodNeedRightMap = array(
        'GET' => self::RightRead,
        // 实际中可能用 HTTP POST 来做 Create 或者 Update，在还没有确定具体是什么操作时，HTTP POST 需要 Create 或者 Update 都可以，当已经确定了具体的操作时，还需要再次判断用户是否有权限进行操作
        'POST' => self::RightCreate | self::RightUpdate,
        // 实际中可能用 HTTP PUT 来做 Create 或者 Update，在还没有确定具体是什么操作时，HTTP PUT 需要 Create 或者 Update 都可以，当已经确定了具体的操作时，还需要再次判断用户是否有权限进行操作
        'PUT' => self::RightCreate | self::RightUpdate,
        'DELETE' => self::RightDelete,
    );

    public function __construct($data = null)
    {
        if (empty($data)) {
            $data = array();
        }
        if (empty($data['rights'])) {
            $data['rights'] = self::RightRead;
        }

        parent::__construct($data);
    }

    /**
     * @inheritDoc
     */
    public function getConnName()
    {
        return App::$p->adminToMenuDb()->getConnName();
    }

    /**
     * @inheritDoc
     */
    public function getDb($quoted = true)
    {
        return App::$p->adminToMenuDb()->getDb($quoted);
    }

    /**
     * @inheritDoc
     */
    public function getTable($quoted = true)
    {
        return 'admin_to_menu';
    }

    /**
     * @return int
     */
    public function getAdminId()
    {
        return $this->get_('admin_id');
    }

    /**
     * @param int $adminId
     */
    public function setAdminId($adminId)
    {
        $this->set_('admin_id', $adminId, self::DataTypeInt);
    }

    /**
     * @return int
     */
    public function getMenuId()
    {
        return $this->get_('menu_id');
    }

    /**
     * @param int $menuId
     */
    public function setMenuId($menuId)
    {
        $this->set_('menu_id', $menuId, self::DataTypeInt);
    }

    /**
     * @return int
     */
    public function getRights()
    {
        return $this->get_('rights');
    }

    /**
     * @param int $rights
     */
    public function setRights($rights)
    {
        $this->set_('rights', $rights, self::DataTypeInt);
    }
}